gtk: get rid of two cases of invalidating the spinbutton when not needed
authorMichael Natterer <mitch@gimp.org>
Sat, 5 Feb 2011 22:42:37 +0000 (23:42 +0100)
committerMichael Natterer <mitch@gimp.org>
Sun, 6 Feb 2011 10:17:58 +0000 (11:17 +0100)
gtk/gtkspinbutton.c

index 729cc8933ec994d144084879c68140eae654d812..b1cbf798c4327165043422bb54a72a2e7e982ae4 100644 (file)
@@ -232,7 +232,7 @@ static void gtk_spin_button_draw_arrow     (GtkSpinButton      *spin_button,
                                             cairo_t            *cr,
                                             GtkArrowType        arrow_type);
 static gboolean gtk_spin_button_timer          (GtkSpinButton      *spin_button);
-static void gtk_spin_button_stop_spinning  (GtkSpinButton      *spin);
+static gboolean gtk_spin_button_stop_spinning  (GtkSpinButton      *spin);
 static void gtk_spin_button_value_changed  (GtkAdjustment      *adjustment,
                                             GtkSpinButton      *spin_button);
 static gint gtk_spin_button_key_release    (GtkWidget          *widget,
@@ -1155,8 +1155,8 @@ gtk_spin_button_grab_notify (GtkWidget *widget,
 
   if (!was_grabbed)
     {
-      gtk_spin_button_stop_spinning (spin);
-      gtk_widget_queue_draw (GTK_WIDGET (spin));
+      if (gtk_spin_button_stop_spinning (spin))
+        gtk_widget_queue_draw (GTK_WIDGET (spin));
     }
 }
 
@@ -1168,8 +1168,8 @@ gtk_spin_button_state_flags_changed (GtkWidget     *widget,
 
   if (!gtk_widget_is_sensitive (widget))
     {
-      gtk_spin_button_stop_spinning (spin);
-      gtk_widget_queue_draw (GTK_WIDGET (spin));
+      if (gtk_spin_button_stop_spinning (spin))
+        gtk_widget_queue_draw (GTK_WIDGET (spin));
     }
 }
 
@@ -1216,26 +1216,28 @@ gtk_spin_button_scroll (GtkWidget      *widget,
   return TRUE;
 }
 
-static void
+static gboolean
 gtk_spin_button_stop_spinning (GtkSpinButton *spin)
 {
   GtkSpinButtonPrivate *priv = spin->priv;
+  gboolean did_spin = FALSE;
 
   if (priv->timer)
     {
       g_source_remove (priv->timer);
       priv->timer = 0;
-      priv->timer_calls = 0;
       priv->need_timer = FALSE;
+
+      did_spin = TRUE;
     }
 
   priv->button = 0;
-  priv->timer = 0;
   priv->timer_step = gtk_adjustment_get_step_increment (priv->adjustment);
   priv->timer_calls = 0;
 
   priv->click_child = NO_ARROW;
-  priv->button = 0;
+
+  return did_spin;
 }
 
 static void